-- 参考 https://www.cnblogs.com/liconglong/p/14347794.html
--用户Id
local userId = KEYS[1]
--用户购买的商品唯一ID 我这边使用商品编号
local goodsScn = KEYS[2]
--秒杀成功redisMap key
local successKey = KEYS[3]
--秒杀商品信息 map key
local actKey = KEYS[4]

--判断的流程:
--判断商品库存数
local skuAmountStr = redis.pcall('hget', actKey, goodsScn) --获取目前sku的库存量
if skuAmountStr == false then
    --如果没有获取到，则说明商品设置有误，直接返回异常
    redis.log(redis.LOG_NOTICE, '没有库存信息 is nil ')
    return '-2'
end
--如果库存不大于0，则说明无库存，不能再抢购
if tonumber(skuAmountStr) <= 0 then
    return '0'
end
--校验该用户是否已经秒杀成功过
if tonumber(skuAmountStr) > 0 then
    local successlog = redis.call('hget', successKey, userId)
    if successlog == false then
        local decrNum = 0-1
        --如果没有查到这可以抢购，开始减库存，添加抢购成功记录
        redis.pcall('hincrby', actKey, goodsScn, decrNum) --sku库存减一
        redis.pcall('hsetnx', successKey, userId, '"'..goodsScn..'"') --用户秒杀成功添加成功记录以及时间 value值需要拼接一个双引号，因为redis代码取值用的json反序列化
        return "1"
    else
        --有秒杀成功的记录则 秒杀失败
        redis.log(redis.LOG_NOTICE, 'There is a spike record')
        return '-1'
    end
end